<!--  -->
<template>
  <div id="app">
    <div>{{ $store.state.counter }}</div>
    <br />
    <button @click="handleAdd">加</button>
    <button @click="handleSub">减</button>
    <button @click="handleAsyncAdd">异步加值</button>
    <br />
    <h1>{{ isEvenOrOdd }}</h1>
  </div>
</template>

<script>
//这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
//例如：import 《组件名称》 from '《组件路径》';
import { ADD, SUB } from "./mution-type";
import { mapGetters } from "vuex";
console.log(mapGetters(["isEvenOrOdd"])); //{isEvenOrOdd: ƒ}返回的是一个对象，对象里面是一个函数就直接是一个函数调用
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  data() {
    //这里存放数据
    return {};
  },
  //监听属性 类似于data概念
  // computed: {
  //   isOddOrEven:function(){
  //     // return this.$store.state.counter%2===0?"偶数":"奇数"
  //     return this.$store.getters.isOddOrEven;
  //   }
  // },
  // computed:mapGetters(["isOddOrEven"]),
  // mapGetters(["isOddOrEven"])返回的是一个对象
  computed: {
    //计算属性
    ...mapGetters(["isEvenOrOdd"]), //深拷贝，...不能省，省了就会报错
    //等价于下面函数
    // isEvenOrOdd: function () {
    // return this.$store.state.counter%2===0?"偶数":"奇数";
    // return this.$store.getters.isEvenOrOdd;
    // },
  },
  //监控data中的数据变化
  watch: {},
  //方法集合
  methods: {
    handleAdd: function () {
      //mutations
      // this.$store.commit('add')
      this.$store.commit(ADD, 11); //传参
    },
    handleSub: function () {
      // this$store.commit('sub')
      // this.$store.commit('MUTATIONS', payload)
      // 用对象的方式提交数据，分别介绍好类型是什么，传入参数是什么
      this.$store.commit({
        type: SUB,
        payload: {
          step: -11,
        },
      });
    },
    handleAsyncAdd: function () {
      this.$store.dispatch("asyncAdd", 11); //dispatch方法是触发分发Action，因为在ACtion里面可以进行异步操作，在mutation（改变）必须进行同步执行操作
    },
  },
  //生命周期 - 创建完成（可以访问当前this实例）
  created() {},
  //生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {},
  beforeCreate() {}, //生命周期 - 创建之前
  beforeMount() {}, //生命周期 - 挂载之前
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能，这个函数会触发
};
</script>
<style  scoped>
</style>